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 (); } }
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); } }
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); }
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); }
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(); } }
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); } }