public static IBGCStream GetNote( ReservedSoundSet set, byte note, byte velocity) { return(GetNote(set, GetNoteFrequency(note), velocity)); }
public static IBGCStream GetNote( ReservedSoundSet set, double frequency, byte velocity) { double amplitude = GetNoteAmplitude(velocity); switch (set) { case ReservedSoundSet.AcousticGrandPiano: case ReservedSoundSet.BrightAcousticPiano: case ReservedSoundSet.ElectricGrandPiano: case ReservedSoundSet.HonkyTonkPiano: case ReservedSoundSet.Harpsichord: case ReservedSoundSet.Clavi: return(new AnalyticStreamAdder( new AnalyticWave(amplitude, frequency), new AnalyticWave(0.5 * amplitude, 3 * frequency), new AnalyticWave(0.25 * amplitude, 5 * frequency), new AnalyticWave(0.125 * amplitude, 7 * frequency)) .FrequencyModulation(15, 2.5) .ToBGCStream() .ADSR(0.0125, 0.25, 0.8, 1.0, 0.05)); case ReservedSoundSet.Xylophone: return(new AnalyticWave(amplitude, frequency) .FrequencyModulation(frequency / 2, 20) .ToBGCStream() .ADSR(0.0125, 0.05, 1, 0.125, 0.05)); case ReservedSoundSet.ElectricPiano1: case ReservedSoundSet.ElectricPiano2: return(new SquareWave(amplitude, frequency, 0.66) .ADSR(0.0125, 0.25, 0.8, 1, 0.05)); case ReservedSoundSet.DrawbarOrgan: case ReservedSoundSet.PercussiveOrgan: case ReservedSoundSet.RockOrgan: case ReservedSoundSet.CrutchOrgan: case ReservedSoundSet.ReedOrgan: case ReservedSoundSet.Accordion: case ReservedSoundSet.Harmonica: case ReservedSoundSet.TangoAccordion: amplitude /= 5.0; return(new StreamAdder( new TriangleWave(0.1 * amplitude, 0.5 * frequency), new TriangleWave(amplitude, frequency), new TriangleWave(amplitude, 1.5 * frequency), new TriangleWave(amplitude, 2 * frequency), new TriangleWave(amplitude, 4 * frequency), new TriangleWave(amplitude, 8 * frequency)) .ADSR(0.0125, 0.25, 0.8, 100, 0.25)); case ReservedSoundSet.AcousticGuitar_Nylon: case ReservedSoundSet.AcousticGuitar_Steel: case ReservedSoundSet.ElectricGuitar_Jazz: case ReservedSoundSet.ElectricGuitar_Clean: case ReservedSoundSet.ElectricGuitar_Muted: case ReservedSoundSet.OverdrivenGuitar: case ReservedSoundSet.DistortionGuitar: case ReservedSoundSet.GuitarHarmonics: case ReservedSoundSet.AcousticBass: case ReservedSoundSet.ElectricBass_Finger: case ReservedSoundSet.ElectricBasS_Pick: case ReservedSoundSet.FretlessBass: case ReservedSoundSet.SlapBass1: case ReservedSoundSet.SlapBass2: case ReservedSoundSet.SynthBass1: case ReservedSoundSet.SynthBass2: return(new SquareWave(amplitude, frequency, 0.33) .ContinuousFilter( envelopeStream: new LinearEnvelope(0.25, 1.5), filterType: ContinuousFilter.FilterType.LowPass, freqLB: 20 * frequency, freqUB: 3 * frequency) .ADSR(0.0125, 0.33, 0.2, 2.0, 0.05)); case ReservedSoundSet.Piccolo: case ReservedSoundSet.Flute: case ReservedSoundSet.Recorder: case ReservedSoundSet.PanFlute: case ReservedSoundSet.BlownBottle: case ReservedSoundSet.Shakuhachi: case ReservedSoundSet.Whistle: case ReservedSoundSet.Ocarina: return(new StreamAdder( new SquareWave(0.75 * amplitude, frequency, 0.6), new AnalyticNoiseStream(0.0125, 20.0, 10000.0, 1000, AnalyticNoiseStream.AmplitudeDistribution.White) .ToBGCStream()) .ContinuousFilter( envelopeStream: new SineWave(1.0, 6.0), filterType: ContinuousFilter.FilterType.LowPass, freqLB: 2 * frequency, freqUB: (2.125 + 0.125 * amplitude) * frequency, qFactor: 0.0125) .BiQuadHighpassFilter(200f) .ADSR(0.125, 0.33, 0.8, 100.0, 0.125)); case ReservedSoundSet.Lead1_Square: return(new SquareWave(amplitude, frequency, 0.5) .ADSR(0.0125, 0.25, 0.8, 1, 0.05)); case ReservedSoundSet.Lead2_Sawtooth: return(new SawtoothWave(amplitude, frequency) .ADSR(0.0125, 0.25, 0.8, 1, 0.05)); default: return(new AnalyticWave(amplitude, frequency) .FrequencyModulation(frequency / 3, 10) .ToBGCStream() .ADSR(0.0125, 0.25, 0.8, 1, 0.05)); } }