Esempio n. 1
0
		public unsafe void ProcessWithEvents (AudioTimeStamp timestamp, int frameCount, AURenderEventEnumerator events)
		{
			var now = (nint)timestamp.SampleTime;
			int framesRemaining = frameCount;
			while (framesRemaining > 0) {
				if (events.IsAtEnd) {
					int bufferOffset = frameCount - framesRemaining;
					Process (framesRemaining, bufferOffset);
					return;
				}

				var framesThisSegment = (int)(events.Current.Head.EventSampleTime - now);

				if (framesThisSegment > 0) {
					int bufferOffset = frameCount - framesRemaining;
					Process (framesThisSegment, bufferOffset);
					framesRemaining -= framesThisSegment;
					now += framesThisSegment;
				}

				foreach (AURenderEvent e in events.EnumeratorCurrentEvents (now))
					HandleOneEvent (e);
				events.MoveNext ();
			}
		}
Esempio n. 2
0
		public unsafe void ProcessWithEvents (AudioTimeStamp timestamp, int frameCount, AURenderEventEnumerator events)
		{
			var now = (nint)timestamp.SampleTime;
			int framesRemaining = frameCount;
			AURenderEvent* theEvent = events.UnsafeFirst;
			while (framesRemaining > 0) {
				if (theEvent == null) {
					int bufferOffset = frameCount - framesRemaining;
					Process (framesRemaining, bufferOffset);
					return;
				}

				int framesThisSegment = (int)(theEvent->Head.EventSampleTime - now);

				if (framesThisSegment > 0) {
					int bufferOffset = frameCount - framesRemaining;
					Process (framesThisSegment, bufferOffset);
					framesRemaining -= framesThisSegment;
					now += framesThisSegment;
				}

				PerformAllSimultaneousEvents (now, &theEvent);
			}
		}
Esempio n. 3
0
        public AudioUnitStatus InternalRenderBlockProc(ref AudioUnitRenderActionFlags actionFlags, ref AudioTimeStamp timestamp, uint frameCount, nint outputBusNumber, AudioBuffers outputData, AURenderEventEnumerator realtimeEventListHead, AURenderPullInputBlock pullInputBlock)
        {
            var transportStateFlags = (AUHostTransportStateFlags)0;

            double currentSamplePosition  = 0;
            double cycleStartBeatPosition = 0;
            double cycleEndBeatPosition   = 0;

            var callBack = TransportStateBlock;

            if (callBack != null)
            {
                callBack(ref transportStateFlags, ref currentSamplePosition, ref cycleStartBeatPosition, ref cycleEndBeatPosition);
            }

            var state = Kernel;
            var input = inputBus;

            var             pullFlags = (AudioUnitRenderActionFlags)0;
            AudioUnitStatus err       = input.PullInput(ref pullFlags, timestamp, frameCount, 0, pullInputBlock);

            if (err != AudioUnitStatus.NoError)
            {
                return(err);
            }

            AudioBuffers inAudioBufferList = input.MutableAudioBufferList;

            if (outputData [0].Data == IntPtr.Zero)
            {
                for (int i = 0; i < outputData.Count; i++)
                {
                    outputData.SetData(i, inAudioBufferList [i].Data);
                }
            }

            state.SetBuffers(inAudioBufferList, outputData);
            state.ProcessWithEvents(timestamp, (int)frameCount, realtimeEventListHead);

            return(AudioUnitStatus.NoError);
        }
Esempio n. 4
0
 public AudioUnitStatus ProcessSignals(ref AudioUnitRenderActionFlags actionFlags, ref AudioToolbox.AudioTimeStamp timestamp, uint frameCount, nint outputBusNumber, AudioToolbox.AudioBuffers outputData, AURenderEventEnumerator realtimeEventListHead, AURenderPullInputBlock pullInputBlock)
 {
     // Do event handling and signal processing here.
     return(AudioUnitStatus.NoError);
 }
Esempio n. 5
0
        public unsafe void ProcessWithEvents(AudioTimeStamp timestamp, int frameCount, AURenderEventEnumerator events)
        {
            var now             = (nint)timestamp.SampleTime;
            int framesRemaining = frameCount;

            while (framesRemaining > 0)
            {
                if (events.IsAtEnd)
                {
                    int bufferOffset = frameCount - framesRemaining;
                    Process(framesRemaining, bufferOffset);
                    return;
                }

                var framesThisSegment = (int)(events.Current.Head.EventSampleTime - now);

                if (framesThisSegment > 0)
                {
                    int bufferOffset = frameCount - framesRemaining;
                    Process(framesThisSegment, bufferOffset);
                    framesRemaining -= framesThisSegment;
                    now             += framesThisSegment;
                }

                foreach (AURenderEvent e in events.EnumeratorCurrentEvents(now))
                {
                    HandleOneEvent(e);
                }
                events.MoveNext();
            }
        }
Esempio n. 6
0
        public unsafe void ProcessWithEvents(AudioTimeStamp timestamp, int frameCount, AURenderEventEnumerator events)
        {
            var            now             = (nint)timestamp.SampleTime;
            int            framesRemaining = frameCount;
            AURenderEvent *theEvent        = events.UnsafeFirst;

            while (framesRemaining > 0)
            {
                if (theEvent == null)
                {
                    int bufferOffset = frameCount - framesRemaining;
                    Process(framesRemaining, bufferOffset);
                    return;
                }

                int framesThisSegment = (int)(theEvent->Head.EventSampleTime - now);

                if (framesThisSegment > 0)
                {
                    int bufferOffset = frameCount - framesRemaining;
                    Process(framesThisSegment, bufferOffset);
                    framesRemaining -= framesThisSegment;
                    now             += framesThisSegment;
                }

                PerformAllSimultaneousEvents(now, &theEvent);
            }
        }