예제 #1
0
        public IALFilter GenFilter()
        {
            uint handle;

            EFX.alGenFilters((IntPtr)1, out handle);
            return(new OpenALFilter(handle));
        }
예제 #2
0
        public void Shutdown()
        {
            this.StopAllSounds();
            Channel.shutdown();
            AL.DeleteBuffers(this.buffers.Length, this.buffers);

            if (OpenTkSound.efx)
            {
                EFX.DeleteEffect(OpenTkSound.efxEffectGeneric);
                EFX.DeleteEffect(OpenTkSound.efxEffectUnderwater);
                EFX.DeleteAuxiliaryEffectSlot(OpenTkSound.efxSlot);
            }

            Cmd.RemoveCommand("play");
            Cmd.RemoveCommand("stopsound");
            Cmd.RemoveCommand("soundlist");
            Cmd.RemoveCommand("soundinfo");

            // free all sounds
            for (var i = 0; i < OpenTkSound.num_sfx; i++)
            {
                if (OpenTkSound.known_sfx[i].name == null)
                {
                    continue;
                }

                OpenTkSound.known_sfx[i].clear();
            }

            OpenTkSound.num_sfx = 0;
        }
예제 #3
0
        public DSPFilter()
        {
            uint handle;

            EFX.alGenFilters((IntPtr)1, out handle);
            Handle = handle;
        }
예제 #4
0
        public void ApplyLowPassFilter(IALFilter filter, float hfGain)
        {
            uint handle = (filter as OpenALFilter).Handle;

            EFX.alFilteri(handle, EFX.AL_FILTER_TYPE, EFX.AL_FILTER_LOWPASS);
            EFX.alFilterf(handle, EFX.AL_LOWPASS_GAINHF, hfGain);
        }
예제 #5
0
        public void Update(float[] origin, float[] forward, float[] right, float[] up)
        {
            Channel.convertVector(origin, this.listenerOrigin);
            AL.Listener(ALListener3f.Position, this.listenerOrigin[0], this.listenerOrigin[1], this.listenerOrigin[2]);

            Channel.convertOrientation(forward, up, this.listenerOrientation);
            AL.Listener(ALListenerfv.Orientation, this.listenerOrientation);

            // set the listener (master) volume
            AL.Listener(ALListenerf.Gain, this.s_volume.value);

            if (OpenTkSound.efx)
            {
                if ((GameBase.gi.pointcontents(origin) & Defines.MASK_WATER) != 0)
                {
                    this.changeEnv  = this.currentEnv != OpenTkSound.efxEffectUnderwater;
                    this.currentEnv = OpenTkSound.efxEffectUnderwater;
                }
                else
                {
                    this.changeEnv  = this.currentEnv != OpenTkSound.efxEffectGeneric;
                    this.currentEnv = OpenTkSound.efxEffectGeneric;
                }

                if (this.changeEnv)
                {
                    this.changeEnv = false;
                    EFX.AuxiliaryEffectSlot(OpenTkSound.efxSlot, EffectSlotInteger.Effect, this.currentEnv);
                }
            }

            Channel.addLoopSounds();
            Channel.addPlaySounds();
            Channel.playAllSounds(this.listenerOrigin);
        }
예제 #6
0
        public void ApplyHighPassFilter(IALFilter filter, float lfGain)
        {
            uint handle = (filter as OpenALFilter).Handle;

            EFX.alFilteri(handle, EFX.AL_FILTER_TYPE, EFX.AL_FILTER_HIGHPASS);
            EFX.alFilterf(handle, EFX.AL_HIGHPASS_GAINLF, lfGain);
        }
예제 #7
0
        public void Dispose()
        {
            // Delete EFX data
            uint handle = Handle;

            EFX.alDeleteAuxiliaryEffectSlots((IntPtr)1, ref handle);
            EFX.alDeleteEffects((IntPtr)1, ref effectHandle);
        }
예제 #8
0
파일: DSPEffect.cs 프로젝트: zwcloud/FNA
 public void CommitChanges()
 {
     EFX.alAuxiliaryEffectSloti(
         Handle,
         EFX.AL_EFFECTSLOT_EFFECT,
         (int)effectHandle
         );
 }
예제 #9
0
파일: DSPEffect.cs 프로젝트: zwcloud/FNA
 public void SetDensity(float value)
 {
     EFX.alEffectf(
         effectHandle,
         EFX.AL_EAXREVERB_DENSITY,
         value / 100.0f
         );
 }
예제 #10
0
파일: DSPEffect.cs 프로젝트: zwcloud/FNA
 public void SetHighEQCutoff(float value)
 {
     EFX.alEffectf(
         effectHandle,
         EFX.AL_EAXREVERB_HFREFERENCE,
         (value * 500.0f) + 1000.0f
         );
 }
예제 #11
0
파일: DSPEffect.cs 프로젝트: zwcloud/FNA
 public void SetLowEQCutoff(float value)
 {
     EFX.alEffectf(
         effectHandle,
         EFX.AL_EAXREVERB_LFREFERENCE,
         (value * 50.0f) + 50.0f
         );
 }
예제 #12
0
파일: DSPEffect.cs 프로젝트: zwcloud/FNA
 public void SetReflectionsDelay(float value)
 {
     EFX.alEffectf(
         effectHandle,
         EFX.AL_EAXREVERB_REFLECTIONS_DELAY,
         value / 1000.0f
         );
 }
예제 #13
0
 public void SetReverbDensity(IALReverb reverb, float value)
 {
     EFX.alEffectf(
         (reverb as OpenALReverb).EffectHandle,
         EFX.AL_EAXREVERB_DENSITY,
         value / 100.0f
         );
 }
예제 #14
0
 public void SetReverbHighEQCutoff(IALReverb reverb, float value)
 {
     EFX.alEffectf(
         (reverb as OpenALReverb).EffectHandle,
         EFX.AL_EAXREVERB_HFREFERENCE,
         (value * 500.0f) + 1000.0f
         );
 }
예제 #15
0
        public void ApplyBandPassFilter(IALFilter filter, float hfGain, float lfGain)
        {
            uint handle = (filter as OpenALFilter).Handle;

            EFX.alFilteri(handle, EFX.AL_FILTER_TYPE, EFX.AL_FILTER_BANDPASS);
            EFX.alFilterf(handle, EFX.AL_BANDPASS_GAINHF, hfGain);
            EFX.alFilterf(handle, EFX.AL_BANDPASS_GAINLF, lfGain);
        }
예제 #16
0
파일: DSPEffect.cs 프로젝트: zwcloud/FNA
 public void SetReverbDelay(float value)
 {
     EFX.alEffectf(
         effectHandle,
         EFX.AL_EAXREVERB_LATE_REVERB_DELAY,
         value / 1000.0f
         );
 }
예제 #17
0
 public void SetReverbDelay(IALReverb reverb, float value)
 {
     EFX.alEffectf(
         (reverb as OpenALReverb).EffectHandle,
         EFX.AL_EAXREVERB_LATE_REVERB_DELAY,
         value / 1000.0f
         );
 }
예제 #18
0
 public void SetReverbReflectionsDelay(IALReverb reverb, float value)
 {
     EFX.alEffectf(
         (reverb as OpenALReverb).EffectHandle,
         EFX.AL_EAXREVERB_REFLECTIONS_DELAY,
         value / 1000.0f
         );
 }
예제 #19
0
        public void DeleteReverb(IALReverb reverb)
        {
            OpenALReverb rv     = (reverb as OpenALReverb);
            uint         slot   = rv.SlotHandle;
            uint         effect = rv.EffectHandle;

            EFX.alDeleteAuxiliaryEffectSlots((IntPtr)1, ref slot);
            EFX.alDeleteEffects((IntPtr)1, ref effect);
        }
예제 #20
0
파일: DSPEffect.cs 프로젝트: zwcloud/FNA
 public void SetLateDiffusion(float value)
 {
     // Same as early diffusion, whatever... -flibit
     EFX.alEffectf(
         effectHandle,
         EFX.AL_EAXREVERB_DIFFUSION,
         value / 15.0f
         );
 }
예제 #21
0
        public DSPEffect()
        {
            // Generate the EffectSlot and Effect
            uint handle;

            EFX.alGenAuxiliaryEffectSlots((IntPtr)1, out handle);
            Handle = handle;
            EFX.alGenEffects((IntPtr)1, out effectHandle);
        }
예제 #22
0
 public void SetReverbLateDiffusion(IALReverb reverb, float value)
 {
     // Same as early diffusion, whatever... -flibit
     EFX.alEffectf(
         (reverb as OpenALReverb).EffectHandle,
         EFX.AL_EAXREVERB_DIFFUSION,
         value / 15.0f
         );
 }
예제 #23
0
 public void SetSourceLowPassFilter(IALSource source, float hfGain)
 {
     EFX.alFilteri(INTERNAL_alFilter, EFX.AL_FILTER_TYPE, EFX.AL_FILTER_LOWPASS);
     EFX.alFilterf(INTERNAL_alFilter, EFX.AL_LOWPASS_GAINHF, hfGain);
     AL10.alSourcei(
         (source as OpenALSource).Handle,
         EFX.AL_DIRECT_FILTER,
         (int)INTERNAL_alFilter
         );
 }
예제 #24
0
 public void SetSourceHighPassFilter(IALSource source, float lfGain)
 {
     EFX.alFilteri(INTERNAL_alFilter, EFX.AL_FILTER_TYPE, EFX.AL_FILTER_HIGHPASS);
     EFX.alFilterf(INTERNAL_alFilter, EFX.AL_HIGHPASS_GAINLF, lfGain);
     AL10.alSourcei(
         (source as OpenALSource).Handle,
         EFX.AL_DIRECT_FILTER,
         (int)INTERNAL_alFilter
         );
 }
예제 #25
0
 public void SetReverbHighEQGain(IALReverb reverb, float value)
 {
     EFX.alEffectf(
         (reverb as OpenALReverb).EffectHandle,
         EFX.AL_EAXREVERB_GAINHF,
         XACTCalculator.CalculateAmplitudeRatio(
             value - 8.0f
             )
         );
 }
예제 #26
0
        public void CommitReverbChanges(IALReverb reverb)
        {
            OpenALReverb rv = (reverb as OpenALReverb);

            EFX.alAuxiliaryEffectSloti(
                rv.SlotHandle,
                EFX.AL_EFFECTSLOT_EFFECT,
                (int)rv.EffectHandle
                );
        }
예제 #27
0
파일: DSPEffect.cs 프로젝트: zwcloud/FNA
 public void SetHighEQGain(float value)
 {
     EFX.alEffectf(
         effectHandle,
         EFX.AL_EAXREVERB_GAINHF,
         XACTCalculator.CalculateAmplitudeRatio(
             value - 8.0f
             )
         );
 }
예제 #28
0
        public void SetReverbDelay(IALReverb reverb, float value)
        {
            EFX.alEffectf(
                (reverb as OpenALReverb).EffectHandle,
                EFX.AL_EAXREVERB_LATE_REVERB_DELAY,
                value / 1000.0f
                );
#if VERBOSE_AL_DEBUGGING
            CheckALError();
#endif
        }
예제 #29
0
        public void SetReverbHighEQCutoff(IALReverb reverb, float value)
        {
            EFX.alEffectf(
                (reverb as OpenALReverb).EffectHandle,
                EFX.AL_EAXREVERB_HFREFERENCE,
                (value * 500.0f) + 1000.0f
                );
#if VERBOSE_AL_DEBUGGING
            CheckALError();
#endif
        }
예제 #30
0
        public void DeleteReverb(IALReverb reverb)
        {
            OpenALReverb rv     = (reverb as OpenALReverb);
            uint         slot   = rv.SlotHandle;
            uint         effect = rv.EffectHandle;

            EFX.alDeleteAuxiliaryEffectSlots(1, ref slot);
            EFX.alDeleteEffects(1, ref effect);
#if VERBOSE_AL_DEBUGGING
            CheckALError();
#endif
        }