xamarin / Xamarin.Forms

Xamarin.Forms is no longer supported. Migrate your apps to .NET MAUI.
https://aka.ms/xamarin-upgrade
Other
5.64k stars 1.88k forks source link

[Bug] Xamarin.iOS delegate AVAudioSinkNodeReceiverHandler gives strange reference to AudioBuffers #15694

Closed Grubleren closed 1 year ago

Grubleren commented 1 year ago

I am trying to use the iOS sink node as in the following example Visual Studio 2022 17.4.4 Remote connection to Mac


using System;
using System.Runtime.InteropServices;
using System.Threading;
using Foundation;
using AudioToolbox;
using AVFoundation;
using UIKit;

void SomeFunc()
        {
           var  engine = new AVAudioEngine();
            var inputNode = engine.InputNode;
            var inputFormat = inputNode.GetBusOutputFormat(0);
            var handler = new AVAudioSinkNodeReceiverHandler(SinkHandler);   
            var sinkNode = new AVAudioSinkNode(handler); 
            engine.AttachNode(sinkNode);
            engine.Connect(inputNode, sinkNode, inputFormat);
            NSError error;
            engine.StartAndReturnError(out error);
        }

 int SinkHandler(AudioTimeStamp ts, uint n, ref AudioBuffers buffers)
        {
                    int nCh = buffers.Count;
                    for (int i = 0; i < nCh; i++)
                    {
                        var f = buffers[i].Data;
                        Marshal.Copy(f, data, 0, (int)n);
                    }

            return 0;
        }

The program crash since buffers is not a valid reference to AudioBuffers. Also it is strange to use a ref parameter in the delegate AVAudioSinkNodeReceiverHandler. I cannot find a way to make it work

jfversluis commented 1 year ago

This issue was moved to xamarin/xamarin-macios#17575