public void Update(int deltaMs) { foreach (KeyValuePair <byte, NoteData> item in voiceTable) { item.Value.Voice.SetFrequencyRatio(item.Value.FrequencyRatio * PitchFrequencyRatio); if (panChanged && !item.Value.IsPercussion) { item.Value.Voice.SetOutputMatrix(1, 2, outputMatrix); } } submix.SetVolume(ValueToAmplitude(Volume)); if (panChanged) { panChanged = false; } if (echoChanged) { EchoParameters effectParameter = default(EchoParameters); effectParameter.Delay = 160f; effectParameter.Feedback = 0.6f; effectParameter.WetDryMix = (float)(int)Echo / 384f; submix.SetEffectParameters(0, effectParameter); echoChanged = false; } }
/// <summary> /// This method opens a selected filter's window where the user /// can set the parameters for the filter. Once the parameters /// are set, the user can then apply, cancel, or remove the filter. /// This method is called when a user selects a new filter under /// the filters menu or when a user selects an already applied filter /// in the filter queue. /// </summary> private void OpenFilterWindow(String filterType, String inputElement) { EffectParameters parameters; if (inputElement.Equals("MenuItem")) { switch (filterType) { case "Echo": parameters = new EchoParameters(); break; case "Amplify": parameters = new AmplifyParameters(); break; case "Bass Boost": parameters = new BassBoostParameters(); break; case "Phaser": parameters = new PhaserParameters(); break; case "Fade In": parameters = new FadeInParameters(); break; case "Fade Out": parameters = new FadeOutParameters(); break; case "Distortion": parameters = new DistortionParameters(); break; default: StatusText.Content = filterType + " is an invalid filter. "; return; } } else { parameters = filtersList[inputElement].param; } FilterWindow winFilter = new FilterWindow(filterType, inputElement, parameters); winFilter.Owner = this; winFilter.Show(); }
public Track(XAudio2 xAudio2, Z2Sound baa, Dictionary <Tuple <byte, byte>, Instrument> instrumentTable, Dictionary <int, Sample> sampleTable) { engine = xAudio2; soundData = baa; this.instrumentTable = instrumentTable; this.sampleTable = sampleTable; voiceTable = new Dictionary <byte, NoteData>(); submix = new SubmixVoice(engine); Echo effect = new Echo(); EffectDescriptor effectDescriptor = new EffectDescriptor(effect) { InitialState = true, OutputChannelCount = 2 }; submix.SetEffectChain(effectDescriptor); EchoParameters effectParameter = new EchoParameters { Delay = 160f, Feedback = 0f, WetDryMix = 0f }; submix.SetEffectParameters(0, effectParameter); submix.EnableEffect(0); outputMatrix = new float[2]; Volume = 127; Pitch = 0; Pan = 63; panChanged = false; Bank = 0; Echo = 0; echoChanged = false; Instrument = 0; outputMatrix[0] = (outputMatrix[1] = 0.5f); }