public AUv3FilterDemo(AudioComponentDescription description, AudioComponentInstantiationOptions options, out NSError error) :
            base(description, options, out error)
        {
            var defaultFormat = new AVAudioFormat(44100.0, 2);

            Kernel.Init((int)defaultFormat.ChannelCount, defaultFormat.SampleRate);

            AUParameter cutoffParam = AUParameterTree.CreateParameter(
                "cutoff", "Cutoff", 0, 12, 2000,
                AudioUnitParameterUnit.Hertz, null,
                0, null, null
                );

            AUParameter resonanceParam = AUParameterTree.CreateParameter(
                "resonance", "Resonance", 1, -20, 20,
                AudioUnitParameterUnit.Decibels, null,
                0, null, null
                );

            cutoffParam.Value    = 400f;
            resonanceParam.Value = -5.0f;
            Kernel.SetParameter((ulong)FilterParam.Cutoff, cutoffParam.Value);
            Kernel.SetParameter((ulong)FilterParam.Resonance, resonanceParam.Value);

            ParameterTree = AUParameterTree.CreateTree(
                new [] {
                cutoffParam,
                resonanceParam
            }
                );

            inputBus.Init(defaultFormat, 8);

            NSError err;

            outputBus = new AUAudioUnitBus(defaultFormat, out err);

            inputBusArray  = new AUAudioUnitBusArray(this, AUAudioUnitBusType.Input, new [] { inputBus.Bus });
            outputBusArray = new AUAudioUnitBusArray(this, AUAudioUnitBusType.Output, new [] { outputBus });

            var filterKernel = Kernel;

            ParameterTree.ImplementorValueObserver           = (param, value) => filterKernel.SetParameter(param.Address, value);
            ParameterTree.ImplementorValueProvider           = param => filterKernel.GetParameter((nuint)param.Address);
            ParameterTree.ImplementorStringFromValueCallback = (AUParameter param, ref float?value) => {
                switch (param.Address)
                {
                case (ulong)FilterParam.Cutoff:
                    return(param.Value.ToString());

                case (ulong)FilterParam.Resonance:
                    return(param.Value.ToString());

                default:
                    return("?");
                }
            };

            MaximumFramesToRender = 512;
        }
예제 #2
0
        public MyAudioUnit(AudioComponentDescription description, AudioComponentInstantiationOptions options, out NSError error)
            : base(description, options, out error)
        {
            // Create parameter objects.
            AUParameter param1 = AUParameterTree.CreateParameter(
                "param1",
                "Parameter 1",
                0, 0, 100,
                AudioUnitParameterUnit.Percent,
                string.Empty,
                0, null, null
                );

            // Initialize the parameter values.
            param1.Value = .5f;

            // Create the parameter tree.
            parameterTree = AUParameterTree.CreateTree(new[] { param1 });

            // Create the input and output busses.
            // Create the input and output bus arrays.

            // A function to provide string representations of parameter values.
            parameterTree.ImplementorStringFromValueCallback = (AUParameter param, ref float?value) =>
            {
                switch (param.Address)
                {
                case 0:
                    return((NSString)value?.ToString());

                default:
                    return(new NSString("?"));
                }
            };

            MaximumFramesToRender = 512;
        }