/* obtain a data reference & info for a sample. returns False if there is no */ /* sample corresponding to the supplied frequency. */ public static bool GetMultiWaveTableReference( MultiWaveTableRec MultiWaveTable, double FrequencyHertz, out float[][] TwoDimensionalVecOut, out int NumFramesOut, out int NumTablesOut) { TwoDimensionalVecOut = null; NumFramesOut = 0; NumTablesOut = 0; for (int i = 0; i < MultiWaveTable.WaveTableInfoArray.Length; i += 1) { OneWaveTableRec Entry = MultiWaveTable.WaveTableInfoArray[i]; if ((FrequencyHertz >= Entry.MinFrequency) && (FrequencyHertz < Entry.MaxFrequency)) { TwoDimensionalVecOut = Entry.WaveTableMatrix; NumFramesOut = Entry.FramesPerTable; NumTablesOut = Entry.NumberOfTables; return(Entry.NumberOfTables > 0); } } return(false); }
/* create a new multisampling object based on a list of wave tables */ public static MultiWaveTableRec NewMultiWaveTable( SampleSelectorRec Selector, WaveSampDictRec Dictionary) { MultiWaveTableRec MultiWaveTable = new MultiWaveTableRec(); int Count = GetSampleSelectorListLength(Selector); MultiWaveTable.WaveTableInfoArray = new OneWaveTableRec[Count]; int Index = 0; for (int i = 0; i < Count; i += 1) { OneWaveTableRec Entry = MultiWaveTable.WaveTableInfoArray[Index] = new OneWaveTableRec(); /* get interval for which this one is valid */ Entry.MinFrequency = GetSampleListEntryLowFreqBound(Selector, i); Entry.MaxFrequency = GetSampleListEntryHighFreqBound(Selector, i); /* get name of wave table for this interval */ string WaveTableName = GetSampleListEntryName(Selector, i); /* see if we can get info about this one */ if (!WaveSampDictGetWaveTableInfo( Dictionary, WaveTableName, out Entry.WaveTableMatrix, out Entry.FramesPerTable, out Entry.NumberOfTables)) { /* couldn't find that wave table, so just skip it */ continue; } /* this entry is valid */ Index += 1; } if (Index < Count) { Array.Resize(ref MultiWaveTable.WaveTableInfoArray, Index); } return(MultiWaveTable); }