Пример #1
0
 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;
     }
 }
Пример #2
0
        private void CreateReverbSubmixVoice()
        {
            try
            {
                VoiceDetails     masterDetails = MasteringVoice.VoiceDetails;
                SubmixVoiceFlags sendFlags     = IsReverbFilterEnabled ? SubmixVoiceFlags.UseFilter : SubmixVoiceFlags.None;
                ReverbVoice = new SubmixVoice(Device, 1, masterDetails.InputSampleRate, sendFlags, 0);
            }
            catch (SharpDXException ex)
            {
                throw new AudioException("Error creating reverb submix voice.", ex);
            }

            try
            {
                reverb = new Reverb();
                ReverbVoice.SetEffectChain(new EffectDescriptor(reverb, 1));
                ReverbVoice.SetEffectParameters(0, reverbParameters);
            }
            catch (SharpDXException ex)
            {
                throw new AudioException("Error setting reverb effect.", ex);
            }
        }
Пример #3
0
            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);
            }