示例#1
0
        /* 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);
        }
示例#2
0
        /* 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);
        }