Beispiel #1
0
        public static void Main()
        {
            using (AudioContext context = new AudioContext())
            {
                Trace.WriteLine("Testing WaveReader({0}).ReadToEnd()", filename);

                EffectsExtension efx = new EffectsExtension();

                int buffer = AL.GenBuffer();
                int source = AL.GenSource();
                int state;

                int effect = efx.GenEffect();
                int slot = efx.GenAuxiliaryEffectSlot();

                efx.BindEffect(effect, EfxEffectType.Reverb);
                efx.Effect(effect, EfxEffectf.ReverbDecayTime, 3.0f);
                efx.Effect(effect, EfxEffectf.ReverbDecayHFRatio, 0.91f);
                efx.Effect(effect, EfxEffectf.ReverbDensity, 0.7f);
                efx.Effect(effect, EfxEffectf.ReverbDiffusion, 0.9f);
                efx.Effect(effect, EfxEffectf.ReverbRoomRolloffFactor, 3.1f);
                efx.Effect(effect, EfxEffectf.ReverbReflectionsGain, 0.723f);
                efx.Effect(effect, EfxEffectf.ReverbReflectionsDelay, 0.03f);
                efx.Effect(effect, EfxEffectf.ReverbGain, 0.23f);

                efx.AuxiliaryEffectSlot(slot, EfxAuxiliaryi.EffectslotEffect, effect);

                int channels, bits, rate;
                byte[] data = Playback.LoadWave(File.Open(filename, FileMode.Open), out channels, out bits, out rate);
                AL.BufferData(buffer, Playback.GetSoundFormat(channels, bits), data, data.Length, rate);

                AL.Source(source, ALSourcef.ConeOuterGain, 1.0f);
                AL.Source(source, ALSourcei.Buffer, buffer);
                AL.SourcePlay(source);

                Trace.Write("Playing");

                // Query the source to find out when it stops playing.
                do
                {
                    Thread.Sleep(250);
                    Trace.Write(".");
                    AL.GetSource(source, ALGetSourcei.SourceState, out state);
                }
                while ((ALSourceState)state == ALSourceState.Playing);

                Trace.WriteLine("");

                AL.SourceStop(source);
                AL.DeleteSource(source);
                AL.DeleteBuffer(buffer);
                efx.DeleteEffect(effect);
                efx.DeleteAuxiliaryEffectSlot(slot);
            }
        }
Beispiel #2
0
        public static void Main()
        {
            using (AudioContext context = new AudioContext())
            {
                Trace.WriteLine("Testing WaveReader({0}).ReadToEnd()", filename);

                EffectsExtension efx = new EffectsExtension();

                int buffer = AL.GenBuffer();
                int source = AL.GenSource();
                int state;

                int effect = efx.GenEffect();
                int slot   = efx.GenAuxiliaryEffectSlot();

                efx.BindEffect(effect, EfxEffectType.Reverb);
                efx.Effect(effect, EfxEffectf.ReverbDecayTime, 3.0f);
                efx.Effect(effect, EfxEffectf.ReverbDecayHFRatio, 0.91f);
                efx.Effect(effect, EfxEffectf.ReverbDensity, 0.7f);
                efx.Effect(effect, EfxEffectf.ReverbDiffusion, 0.9f);
                efx.Effect(effect, EfxEffectf.ReverbRoomRolloffFactor, 3.1f);
                efx.Effect(effect, EfxEffectf.ReverbReflectionsGain, 0.723f);
                efx.Effect(effect, EfxEffectf.ReverbReflectionsDelay, 0.03f);
                efx.Effect(effect, EfxEffectf.ReverbGain, 0.23f);

                efx.AuxiliaryEffectSlot(slot, EfxAuxiliaryi.EffectslotEffect, effect);

                int    channels, bits, rate;
                byte[] data = Playback.LoadWave(File.Open(filename, FileMode.Open), out channels, out bits, out rate);
                AL.BufferData(buffer, Playback.GetSoundFormat(channels, bits), data, data.Length, rate);

                AL.Source(source, ALSourcef.ConeOuterGain, 1.0f);
                AL.Source(source, ALSourcei.Buffer, buffer);
                AL.SourcePlay(source);

                Trace.Write("Playing");

                // Query the source to find out when it stops playing.
                do
                {
                    Thread.Sleep(250);
                    Trace.Write(".");
                    AL.GetSource(source, ALGetSourcei.SourceState, out state);
                }while ((ALSourceState)state == ALSourceState.Playing);

                Trace.WriteLine("");

                AL.SourceStop(source);
                AL.DeleteSource(source);
                AL.DeleteBuffer(buffer);
                efx.DeleteEffect(effect);
                efx.DeleteAuxiliaryEffectSlot(slot);
            }
        }
Beispiel #3
0
        public DSPReverbEffect(DSPParameter[] parameters) : base()
        {
            // Obtain EFX entry points
            EffectsExtension EFX = OpenALDevice.Instance.EFX;

            // Set up the Reverb Effect
            EFX.BindEffect(effectHandle, EfxEffectType.EaxReverb);

            // TODO: Use DSP Parameters on EAXReverb Effect. They don't bind very cleanly. :/

            // Bind the Effect to the EffectSlot. XACT will use the EffectSlot.
            EFX.BindEffectToAuxiliarySlot(Handle, effectHandle);
        }
        public EfxDiagnostic()
        {
            Trace.WriteLine("--- Efx related errors ---");

            EffectsExtension Efx = new EffectsExtension();

            Trace.Assert(Efx.IsInitialized);

            #region Test for available Effects
            uint effect;
            Efx.GenEffect(out effect);
            AL.GetError();
            foreach (EfxEffectType e in EffectNames)
            {
                Efx.BindEffect(effect, e);
                Effects.Add(e.ToString(), AL.GetError() == ALError.NoError);
            }
            Efx.DeleteEffect(ref effect);
            #endregion Test for available Effects

            #region Test for available Filters
            uint filter;
            Efx.GenFilter(out filter);
            AL.GetError();
            foreach (EfxFilterType f in FilterNames)
            {
                Efx.Filter(filter, EfxFilteri.FilterType, (int)f);
                Filters.Add(f.ToString(), AL.GetError() == ALError.NoError);
            }
            Efx.DeleteFilter(ref filter);
            #endregion Test for available Filters

            AL.GetError();
            uint[] dummy_slots = new uint[MaxAuxiliaryEffectSlotsLimit];
            for (MaxAuxiliaryEffectSlots = 0; MaxAuxiliaryEffectSlots < MaxAuxiliaryEffectSlotsLimit; MaxAuxiliaryEffectSlots++)
            {
                Efx.GenAuxiliaryEffectSlot(out dummy_slots[MaxAuxiliaryEffectSlots]);
                if (AL.GetError() != ALError.NoError)
                {
                    break;
                }
            }
            for (uint i = 0; i < MaxAuxiliaryEffectSlots; i++)
            {
                Efx.DeleteAuxiliaryEffectSlot(ref dummy_slots[i]);
            }
        }
        public EfxDiagnostic()
        {
            Trace.WriteLine("--- Efx related errors ---");

            EffectsExtension Efx = new EffectsExtension();
            Trace.Assert(Efx.IsInitialized);

            #region Test for available Effects
            uint effect;
            Efx.GenEffect(out effect);
            AL.GetError();
            foreach (EfxEffectType e in EffectNames)
            {
                Efx.BindEffect(effect, e);
                Effects.Add(e.ToString(), AL.GetError() == ALError.NoError);
            }
            Efx.DeleteEffect(ref effect);
            #endregion Test for available Effects

            #region Test for available Filters
            uint filter;
            Efx.GenFilter(out filter);
            AL.GetError();
            foreach (EfxFilterType f in FilterNames)
            {
                Efx.Filter(filter, EfxFilteri.FilterType, (int)f);
                Filters.Add(f.ToString(), AL.GetError() == ALError.NoError);
            }
            Efx.DeleteFilter(ref filter);
            #endregion Test for available Filters

            AL.GetError();
            uint[] dummy_slots = new uint[MaxAuxiliaryEffectSlotsLimit];
            for (MaxAuxiliaryEffectSlots = 0; MaxAuxiliaryEffectSlots < MaxAuxiliaryEffectSlotsLimit; MaxAuxiliaryEffectSlots++)
            {
                Efx.GenAuxiliaryEffectSlot(out dummy_slots[MaxAuxiliaryEffectSlots]);
                if (AL.GetError() != ALError.NoError)
                    break;
            }
            for (uint i = 0; i < MaxAuxiliaryEffectSlots; i++)
                Efx.DeleteAuxiliaryEffectSlot(ref dummy_slots[i]);
        }