unsafe AVAudioMix CreateAudioMix ()
		{
			AVMutableAudioMix audioMix = AVMutableAudioMix.Create ();
			AVMutableAudioMixInputParameters audioMixInputParameters = AVMutableAudioMixInputParameters.FromTrack (audioAssetTrack);
			var callbacks = new MTAudioProcessingTapCallbacks (TapProcess) {
				Initialize = TapInitialization,
				Finalize = Finalaze,
				Prepare = TapPrepare,
				Unprepare = Unprepare,
			};

			audioProcessingTap = new MTAudioProcessingTap (callbacks, MTAudioProcessingTapCreationFlags.PreEffects);
			audioMixInputParameters.AudioTapProcessor = audioProcessingTap;

			audioMix.InputParameters = new AVAudioMixInputParameters[] { audioMixInputParameters };

			return audioMix;
		}
        unsafe AVAudioMix CreateAudioMix()
        {
            AVMutableAudioMix audioMix = AVMutableAudioMix.Create();
            AVMutableAudioMixInputParameters audioMixInputParameters = AVMutableAudioMixInputParameters.FromTrack(audioAssetTrack);
            var callbacks = new MTAudioProcessingTapCallbacks(TapProcess)
            {
                Initialize = TapInitialization,
                Finalize   = Finalaze,
                Prepare    = TapPrepare,
                Unprepare  = Unprepare,
            };

            audioProcessingTap = new MTAudioProcessingTap(callbacks, MTAudioProcessingTapCreationFlags.PreEffects);
            audioMixInputParameters.AudioTapProcessor = audioProcessingTap;

            audioMix.InputParameters = new AVAudioMixInputParameters[] { audioMixInputParameters };

            return(audioMix);
        }
        public unsafe void Initialization()
        {
            TestRuntime.AssertSystemVersion(ApplePlatform.MacOSX, 10, 9, throwIfOtherPlatform: false);

            var cb = new MTAudioProcessingTapCallbacks(
                delegate(MTAudioProcessingTap tap, nint numberFrames, MTAudioProcessingTapFlags flags, AudioBuffers bufferList, out nint numberFramesOut, out MTAudioProcessingTapFlags flagsOut) {
                numberFramesOut = 2;
                flagsOut        = MTAudioProcessingTapFlags.StartOfStream;
            });

            cb.Initialize = delegate(MTAudioProcessingTap tap, out void *tapStorage) {
                tapStorage = (void *)44;
            };

            IntPtr handle;

            using (var res = new MTAudioProcessingTap(cb, MTAudioProcessingTapCreationFlags.PreEffects))
            {
                handle = res.Handle;
                Assert.AreEqual(44, (int)res.GetStorage());
                Assert.That(CFGetRetainCount(handle), Is.EqualTo((nint)1), "RC");
            }
        }