public PatchAsset(string name, Patch patch)
 {
     if (name == null)
         throw new ArgumentNullException("An asset must be given a valid name.");
     this.assetName = name;
     this.patch = patch;
 }
 public void Configure(int channel, int note, int velocity, Patch patch, SynthParameters synthParams)
 {
     voiceparams.Reset();
     voiceparams.channel = channel;
     voiceparams.note = note;
     voiceparams.velocity = velocity;
     voiceparams.synthParams = synthParams;
     this.patch = patch;
 }
 public PatchInterval(Patch patch, byte startChannel, byte endChannel, byte startKey, byte endKey, byte startVelocity, byte endVelocity)
 {
     this.patch = patch;
     this.startChannel = startChannel;
     this.endChannel = endChannel;
     this.startKey = startKey;
     this.endKey = endKey;
     this.startVelocity = startVelocity;
     this.endVelocity = endVelocity;
 }
 public int FindPatches(int channel, int key, int velocity, Patch[] layers)
 {
     int count = 0;
     switch (iType)
     {
         case IntervalType.Channel_Key_Velocity:
             for (int x = 0; x < intervalList.Length; x++)
             {
                 if (intervalList[x].CheckAllIntervals(channel, key, velocity))
                 {
                     layers[count++] = intervalList[x].patch;
                     if (count == layers.Length)
                         break;
                 }
             }
             break;
         case IntervalType.Channel_Key:
             for (int x = 0; x < intervalList.Length; x++)
             {
                 if (intervalList[x].CheckChannelAndKey(channel, key))
                 {
                     layers[count++] = intervalList[x].patch;
                     if (count == layers.Length)
                         break;
                 }
             }
             break;
         case IntervalType.Key_Velocity:
             for (int x = 0; x < intervalList.Length; x++)
             {
                 if (intervalList[x].CheckKeyAndVelocity(key, velocity))
                 {
                     layers[count++] = intervalList[x].patch;
                     if (count == layers.Length)
                         break;
                 }
             }
             break;
         case IntervalType.Key:
             for (int x = 0; x < intervalList.Length; x++)
             {
                 if (intervalList[x].CheckKey(key))
                 {
                     layers[count++] = intervalList[x].patch;
                     if (count == layers.Length)
                         break;
                 }
             }
             break;
     }
     return count;
 }
Пример #5
0
 public Synthesizer(int sampleRate, int audioChannels, int bufferSize, int bufferCount, int polyphony)
 {
     const int MinSampleRate = 8000;
     const int MaxSampleRate = 96000;
     //Setup synth parameters
     if (sampleRate < MinSampleRate || sampleRate > MaxSampleRate)
         throw new ArgumentException("Invalid paramater: (sampleRate) Valid ranges are " + MinSampleRate + " to " + MaxSampleRate, "sampleRate");
     this.sampleRate = sampleRate;
     if (audioChannels < 1 || audioChannels > 2)
         throw new ArgumentException("Invalid paramater: (audioChannels) Valid ranges are " + 1 + " to " + 2, "audioChannels");
     this.audioChannels = audioChannels;
     this.microBufferSize = SynthHelper.Clamp(bufferSize, (int)(MinBufferSize * sampleRate), (int)(MaxBufferSize * sampleRate));
     this.microBufferSize = (int)Math.Ceiling(this.microBufferSize / (double)DefaultBlockSize) * DefaultBlockSize; //ensure multiple of block size
     this.microBufferCount = Math.Max(1, bufferCount);
     sampleBuffer = new float[microBufferSize * microBufferCount * audioChannels];
     littleEndian = true;
     //Setup Controllers
     synthChannels = new SynthParameters[DefaultChannelCount];
     for (int x = 0; x < synthChannels.Length; x++)
         synthChannels[x] = new SynthParameters(this);            
     //Create synth voices
     voiceManager = new VoiceManager(SynthHelper.Clamp(polyphony, MinPolyphony, MaxPolyphony));
     //Create midi containers
     midiEventQueue = new Queue<MidiMessage>();
     midiEventCounts = new int[this.microBufferCount];
     layerList = new Patch[15]; 
 }
 //private void LoadSampleAssets(string patchName, string directory, DescriptorList description)
 //{
 //    for (int x = 0; x < description.GenDescriptions.Length; x++)
 //    {
 //        if (description.GenDescriptions[x].SamplerType == WaveformEnum.SampleData && !description.GenDescriptions[x].AssetName.Equals("null"))
 //        {
 //            assets.LoadSampleAsset(description.GenDescriptions[x].AssetName, patchName, directory);
 //        }
 //    }
 //}
 private void AssignPatchToBank(Patch patch, int bankNumber, int startRange, int endRange)
 {
     //make sure bank is valid
     if (bankNumber < 0)
         return;
     //make sure range is valid
     if (startRange > endRange)
     {
         int range = startRange;
         startRange = endRange;
         endRange = range;
     }
     if(startRange < 0 || startRange >= BankSize)
         throw new ArgumentOutOfRangeException("startRange");
     if (endRange < 0 || endRange >= BankSize)
         throw new ArgumentOutOfRangeException("endRange");
     //create bank if necessary and load assign patches
     Patch[] patches;
     if (bank.ContainsKey(bankNumber))
     {
         patches = bank[bankNumber];
     }
     else
     {
         patches = new Patch[BankSize];
         bank.Add(bankNumber, patches);
     }
     for (int x = startRange; x <= endRange; x++)
         patches[x] = patch;
 }