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; }
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; }