unsafe void TapProcess(MTAudioProcessingTap tap, nint numberFrames, MTAudioProcessingTapFlags flags, AudioBuffers bufferList, out nint numberFramesOut, out MTAudioProcessingTapFlags flagsOut) { numberFramesOut = 0; flagsOut = (MTAudioProcessingTapFlags)0; // Skip processing when format not supported. if (!context.SupportedTapProcessingFormat) { Console.WriteLine("Unsupported tap processing format."); return; } if (IsBandpassFilterEnabled) { // Apply bandpass filter Audio Unit. if (context.AudioUnit != null) { var audioTimeStamp = new AudioTimeStamp { SampleTime = context.SampleCount, Flags = AudioTimeStamp.AtsFlags.SampleTimeValid }; var f = (AudioUnitRenderActionFlags)0; var status = context.AudioUnit.Render(ref f, audioTimeStamp, 0, (uint)numberFrames, bufferList); if (status != AudioUnitStatus.NoError) { Console.WriteLine("AudioUnitRender(): {0}", status); return; } // Increment sample count for audio unit. context.SampleCount += numberFrames; // Set number of frames out. numberFramesOut = numberFrames; } } else { // Get actual audio buffers from MTAudioProcessingTap (AudioUnitRender() will fill bufferListInOut otherwise). CMTimeRange tr; var status = tap.GetSourceAudio(numberFrames, bufferList, out flagsOut, out tr, out numberFramesOut); if (status != MTAudioProcessingTapError.None) { Console.WriteLine("MTAudioProcessingTapGetSourceAudio: {0}", status); return; } } UpdateVolumes(bufferList, numberFrames); }
static void ProcessProxy(IntPtr tap, int numberFrames, MTAudioProcessingTapFlags flags, IntPtr bufferList, out int numberFramesOut, out MTAudioProcessingTapFlags flagsOut) { long numberOut; MTAudioProcessingTap apt; lock (handles) apt = handles [tap]; apt.callbacks.Processing(apt, (long)numberFrames, flags, new AudioBuffers(bufferList), out numberOut, out flagsOut); numberFramesOut = (int)numberOut; }
static void ProcessProxy(IntPtr tap, IntPtr numberFrames, MTAudioProcessingTapFlags flags, IntPtr bufferList, out IntPtr numberFramesOut, out MTAudioProcessingTapFlags flagsOut) { // from here we do not have access to `clientInfo` so it's not possible to use the GCHandle to get the // MTAudioProcessingTap managed instance. Instead we get it from a static Dictionary nint numberOut; MTAudioProcessingTap apt; lock (handles) apt = handles [tap]; apt.callbacks.Processing(apt, (nint)numberFrames, flags, new AudioBuffers(bufferList), out numberOut, out flagsOut); numberFramesOut = (IntPtr)numberOut; }
public MTAudioProcessingTapError GetSourceAudio(nint frames, AudioBuffers bufferList, out MTAudioProcessingTapFlags flags, out CMTimeRange timeRange, out nint framesProvided) { if (bufferList == null) { throw new ArgumentNullException("bufferList"); } IntPtr result; var r = MTAudioProcessingTapGetSourceAudio(handle, (IntPtr)frames, (IntPtr)bufferList, out flags, out timeRange, out result); framesProvided = (nint)result; return(r); }
extern static /* OSStatus */ MTAudioProcessingTapError MTAudioProcessingTapGetSourceAudio( /* MTAudioProcessingTapRef */ IntPtr tap, IntPtr numberFrames, /* AudioBufferList* */ IntPtr bufferListInOut, out MTAudioProcessingTapFlags flagsOut, out CMTimeRange timeRangeOut, out IntPtr numberFramesOut);
public MTAudioProcessingTapError GetSourceAudio(int frames, AudioBuffers bufferList, out MTAudioProcessingTapFlags flags, out CMTimeRange timeRange, out int framesProvided) { if (bufferList == null) { throw new ArgumentNullException("bufferList"); } return(MTAudioProcessingTapGetSourceAudio(handle, frames, (IntPtr)bufferList, out flags, out timeRange, out framesProvided)); }
public MTAudioProcessingTapError GetSourceAudio(long frames, ref AudioBufferList bufferList, out MTAudioProcessingTapFlags flags, out CMTimeRange timeRange, long framesProvided) { int outFp; return(MTAudioProcessingTapGetSourceAudio(handle, (int)frames, ref bufferList, out flags, out timeRange, out outFp)); }
static void ProcessProxy (IntPtr tap, int numberFrames, MTAudioProcessingTapFlags flags, IntPtr bufferList, out int numberFramesOut, out MTAudioProcessingTapFlags flagsOut) { long numberOut; MTAudioProcessingTap apt; lock (handles) apt = handles [tap]; apt.callbacks.Processing (apt, (long) numberFrames, flags, new AudioBuffers (bufferList), out numberOut, out flagsOut); numberFramesOut = (int) numberOut; }
public MTAudioProcessingTapError GetSourceAudio (int frames, AudioBuffers bufferList, out MTAudioProcessingTapFlags flags, out CMTimeRange timeRange, out int framesProvided) { if (bufferList == null) throw new ArgumentNullException ("bufferList"); return MTAudioProcessingTapGetSourceAudio (handle, frames, (IntPtr) bufferList, out flags, out timeRange, out framesProvided); }
public MTAudioProcessingTapError GetSourceAudio (long frames, AudioBuffers bufferList, out MTAudioProcessingTapFlags flags, out CMTimeRange timeRange, long framesProvided) { if (bufferList == null) throw new ArgumentNullException ("bufferList"); int result; var r = MTAudioProcessingTapGetSourceAudio (handle, (int) frames, (IntPtr) bufferList, out flags, out timeRange, out result); return r; }
extern static /* OSStatus */ MTAudioProcessingTapError MTAudioProcessingTapGetSourceAudio ( /* MTAudioProcessingTapRef */ IntPtr tap, int numberFrames, /* AudioBufferList* */ IntPtr bufferListInOut, out MTAudioProcessingTapFlags flagsOut, out CMTimeRange timeRangeOut, out int numberFramesOut);
public MTAudioProcessingTapError GetSourceAudio (long frames, ref AudioBufferList bufferList, out MTAudioProcessingTapFlags flags, out CMTimeRange timeRange, long framesProvided) { int outFp; return MTAudioProcessingTapGetSourceAudio (handle, (int) frames, ref bufferList, out flags, out timeRange, out outFp); }
static void ProcessProxy (IntPtr tap, IntPtr numberFrames, MTAudioProcessingTapFlags flags, IntPtr bufferList, out IntPtr numberFramesOut, out MTAudioProcessingTapFlags flagsOut) { // from here we do not have access to `clientInfo` so it's not possible to use the GCHandle to get the // MTAudioProcessingTap managed instance. Instead we get it from a static Dictionary nint numberOut; MTAudioProcessingTap apt; lock (handles) apt = handles [tap]; apt.callbacks.Processing (apt, (nint) numberFrames, flags, new AudioBuffers (bufferList), out numberOut, out flagsOut); numberFramesOut = (IntPtr) numberOut; }
unsafe void TapProcess (MTAudioProcessingTap tap, nint numberFrames, MTAudioProcessingTapFlags flags, AudioBuffers bufferList, out nint numberFramesOut, out MTAudioProcessingTapFlags flagsOut) { numberFramesOut = 0; flagsOut = (MTAudioProcessingTapFlags)0; // Skip processing when format not supported. if (!context.SupportedTapProcessingFormat) { Console.WriteLine ("Unsupported tap processing format."); return; } if (IsBandpassFilterEnabled) { // Apply bandpass filter Audio Unit. if (context.AudioUnit != null) { var audioTimeStamp = new AudioTimeStamp { SampleTime = context.SampleCount, Flags = AudioTimeStamp.AtsFlags.SampleTimeValid }; var f = (AudioUnitRenderActionFlags)0; var status = context.AudioUnit.Render (ref f, audioTimeStamp, 0, (uint)numberFrames, bufferList); if (status != AudioUnitStatus.NoError) { Console.WriteLine ("AudioUnitRender(): {0}", status); return; } // Increment sample count for audio unit. context.SampleCount += numberFrames; // Set number of frames out. numberFramesOut = numberFrames; } } else { // Get actual audio buffers from MTAudioProcessingTap (AudioUnitRender() will fill bufferListInOut otherwise). CMTimeRange tr; MTAudioProcessingTapError status = tap.GetSourceAudio (numberFrames, bufferList, out flagsOut, out tr, out numberFramesOut); if (status != MTAudioProcessingTapError.None) { Console.WriteLine ("MTAudioProcessingTapGetSourceAudio: {0}", status); return; } } UpdateVolumes (bufferList, numberFrames); }