Beispiel #1
0
        public void SelectEffectWithComponentDescription(AudioComponentDescription?componentDescription, Action completionHandler)
        {
            if (isPlaying)
            {
                player.Pause();
            }

            if (effect != null)
            {
                engine.DisconnectNodeInput(effect);
                engine.DisconnectNodeInput(engine.MainMixerNode);

                engine.Connect(player, engine.MainMixerNode, file.ProcessingFormat);

                engine.DetachNode(effect);

                effect     = null;
                AudioUnit  = null;
                PresetList = new AUAudioUnitPreset[0];
            }

            if (componentDescription.HasValue)
            {
                AVAudioUnit.FromComponentDescription(componentDescription.Value, AudioComponentInstantiationOptions.OutOfProcess, (avAudioUnitEffect, AVError) => {
                    if (AVError != null || avAudioUnitEffect == null)
                    {
                        Console.WriteLine("SelectEffectWithComponentDescription error!");
                        return;
                    }

                    effect = avAudioUnitEffect;
                    engine.AttachNode(avAudioUnitEffect);

                    engine.DisconnectNodeInput(engine.MainMixerNode);

                    engine.Connect(player, avAudioUnitEffect, file.ProcessingFormat);
                    engine.Connect(avAudioUnitEffect, engine.MainMixerNode, file.ProcessingFormat);

                    AudioUnit  = avAudioUnitEffect.AUAudioUnit;
                    PresetList = avAudioUnitEffect.AUAudioUnit.FactoryPresets ?? new AUAudioUnitPreset[0];
                    Done(completionHandler);
                });
            }
            else
            {
                Done(completionHandler);
            }
        }
		public void SelectEffectWithComponentDescription (AudioComponentDescription? componentDescription, Action completionHandler)
		{
			if (isPlaying)
				player.Pause ();

			if (effect != null) {
				engine.DisconnectNodeInput (effect);
				engine.DisconnectNodeInput (engine.MainMixerNode);

				engine.Connect (player, engine.MainMixerNode, file.ProcessingFormat);

				engine.DetachNode (effect);

				effect = null;
				AudioUnit = null;
				PresetList = new AUAudioUnitPreset[0];
			}

			if (componentDescription.HasValue) {
				AVAudioUnit.FromComponentDescription (componentDescription.Value, AudioComponentInstantiationOptions.OutOfProcess, (avAudioUnitEffect, AVError) => {
					if (AVError != null || avAudioUnitEffect == null) {
						Console.WriteLine ("SelectEffectWithComponentDescription error!");
						return;
					}

					effect = avAudioUnitEffect;
					engine.AttachNode (avAudioUnitEffect);

					engine.DisconnectNodeInput (engine.MainMixerNode);

					engine.Connect (player, avAudioUnitEffect, file.ProcessingFormat);
					engine.Connect (avAudioUnitEffect, engine.MainMixerNode, file.ProcessingFormat);

					AudioUnit = avAudioUnitEffect.AUAudioUnit;
					PresetList = avAudioUnitEffect.AUAudioUnit.FactoryPresets ?? new AUAudioUnitPreset[0];
					Done (completionHandler);
				});
			} else {
				Done (completionHandler);
			}
		}