Beispiel #1
0
            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;
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 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));
        }
Beispiel #8
0
		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;
		}
Beispiel #9
0
		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);
		}
Beispiel #10
0
		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;
		}
Beispiel #11
0
		extern static /* OSStatus */ MTAudioProcessingTapError MTAudioProcessingTapGetSourceAudio (
			/* MTAudioProcessingTapRef */ IntPtr tap, int numberFrames, 
			/* AudioBufferList* */ IntPtr bufferListInOut,
			out MTAudioProcessingTapFlags flagsOut, out CMTimeRange timeRangeOut, out int numberFramesOut);
Beispiel #12
0
		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);
		}
Beispiel #13
0
		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);
		}