Пример #1
0
        public static MidiThruConnection[] Find(string persistentOwnerID, out MidiError error)
        {
            if (persistentOwnerID == null)
            {
                throw new ArgumentNullException(nameof(persistentOwnerID));
            }

            IntPtr ret;

            using (var nssstr = new NSString(persistentOwnerID)) {
                error = MIDIThruConnectionFind(nssstr.Handle, out ret);
            }
            using (var data = Runtime.GetNSObject <NSData> (ret)) {
                var typeSize  = Marshal.SizeOf(typeof(MidiThruConnectionRef));
                var totalObjs = (int)data.Length / typeSize;
                if (totalObjs == 0)
                {
                    return(null);
                }

                var basePtr     = data.Bytes.ToInt32();
                var connections = new MidiThruConnection[totalObjs];
                for (int i = 0; i < totalObjs; i++)
                {
                    connections[i] = new MidiThruConnection((uint)(basePtr + i * typeSize));
                }

                return(connections);
            }
        }
Пример #2
0
        public MidiEndpoint CreateVirtualSource(string name, out MidiError statusCode)
        {
            IntPtr ptr;

            statusCode = (MidiError)CoreMidiInterop.MIDISourceCreate(Handle, Midi.ToCFStringRef(name), out ptr);
            return(statusCode == MidiError.Ok ? new MidiEndpoint(ptr, name, true, null) : null);
        }
Пример #3
0
        public MidiEndpoint CreateVirtualDestination(string name, out MidiError statusCode)
        {
            IntPtr ptr;
            var    d = new ReadDispatcher();

            statusCode = (MidiError)CoreMidiInterop.MIDIDestinationCreate(Handle, Midi.ToCFStringRef(name),
                                                                          d.DispatchProc, IntPtr.Zero, out ptr);
            return(statusCode == MidiError.Ok ? new MidiEndpoint(ptr, name, true, d) : null);
        }
Пример #4
0
        public static MidiThruConnection Create(string persistentOwnerID, MidiThruConnectionParams connectionParams, out MidiError error)
        {
            MidiThruConnectionRef ret;

            using (var data = connectionParams.WriteStruct ()) {
                var retStr = NSString.CreateNative (persistentOwnerID);
                error = MIDIThruConnectionCreate (retStr, data.Handle, out ret);
                NSString.ReleaseNative (retStr);
            }

            if (error != MidiError.Ok)
                return null;

            return new MidiThruConnection (ret);
        }
Пример #5
0
        public static MidiThruConnection[]? Find(string persistentOwnerID, out MidiError error)
        {
            if (persistentOwnerID is null)
            {
                throw new ArgumentNullException(nameof(persistentOwnerID));
            }

            IntPtr ret;
            var    persistentOwnerIDHandle = CFString.CreateNative(persistentOwnerID);

            try {
                error = MIDIThruConnectionFind(persistentOwnerIDHandle, out ret);
            } finally {
                CFString.ReleaseNative(persistentOwnerIDHandle);
            }
            using (var data = Runtime.GetNSObject <NSData> (ret)) {
                if (data is null)
                {
                    return(null);
                }
                var typeSize  = Marshal.SizeOf(typeof(MidiThruConnectionRef));
                var totalObjs = (int)data.Length / typeSize;
                if (totalObjs == 0)
                {
                    return(null);
                }

                var connections = new MidiThruConnection[totalObjs];
                unsafe {
                    uint *handles = (uint *)(IntPtr)data.Bytes;
                    for (int i = 0; i < totalObjs; i++)
                    {
                        connections [i] = new MidiThruConnection(handles [i]);
                    }
                }

                return(connections);
            }
        }
Пример #6
0
        public static MidiThruConnection[] Find(string persistentOwnerID, out MidiError error)
        {
            if (persistentOwnerID == null)
                throw new ArgumentNullException (nameof (persistentOwnerID));

            IntPtr ret;
            using (var nssstr = new NSString (persistentOwnerID)) {
                error = MIDIThruConnectionFind (nssstr.Handle, out ret);
            }
            using (var data = Runtime.GetNSObject<NSData> (ret)) {
                var typeSize = Marshal.SizeOf (typeof (MidiThruConnectionRef));
                var totalObjs = (int) data.Length / typeSize;
                if (totalObjs == 0)
                    return null;

                var basePtr = data.Bytes.ToInt32 ();
                var connections = new MidiThruConnection[totalObjs];
                for (int i = 0; i < totalObjs; i++)
                    connections[i] = new MidiThruConnection ((uint)(basePtr + i * typeSize));

                return connections;
            }
        }
Пример #7
0
        public MidiThruConnectionParams?GetParams(out MidiError error)
        {
            if (Handle == InvalidRef)
            {
                throw new ObjectDisposedException("MidiThruConnection");
            }

            IntPtr ret;

            error = MIDIThruConnectionGetParams(Handle, out ret);
            if (error != MidiError.Ok || ret == IntPtr.Zero)
            {
                return(null);
            }
            using (var data = Runtime.GetNSObject <NSData> (ret, true)) {
                if (data is null)
                {
                    return(null);
                }
                var cnnParams = new MidiThruConnectionParams();
                cnnParams.ReadStruct(data);
                return(cnnParams);
            }
        }
Пример #8
0
		internal MidiException (MidiError code) : base (code.ToString ())
		{
			ErrorCode = code;
		}
Пример #9
0
        public static MidiThruConnection?Create(string persistentOwnerID, MidiThruConnectionParams connectionParams, out MidiError error)
        {
            MidiThruConnectionRef ret;

            using (var data = connectionParams.WriteStruct()) {
                var retStr = CFString.CreateNative(persistentOwnerID);
                try {
                    error = MIDIThruConnectionCreate(retStr, data.Handle, out ret);
                } finally {
                    CFString.ReleaseNative(retStr);
                }
            }

            if (error != MidiError.Ok)
            {
                return(null);
            }

            return(new MidiThruConnection(ret));
        }
Пример #10
0
		public MidiEndpoint CreateVirtualDestination (string name, out MidiError status)
		{
			var m = new MidiEndpoint (this, name, out status);
			if (status == MidiError.Ok)
				return m;

			m.Dispose ();
			return null;
		}
Пример #11
0
		public MidiEndpoint CreateVirtualSource (string name, out MidiError statusCode)
		{
			using (var nsstr = new NSString (name)){
				MidiObjectRef ret;
				var code = MIDISourceCreate (handle, nsstr.Handle, out ret);
				if (code != 0){
					statusCode = (MidiError) code;
					return null;
				}
				statusCode = MidiError.Ok;
				return new MidiEndpoint (ret, true);
			}			
		}
Пример #12
0
		internal MidiException (MidiError code) : base (code == MidiError.NotPermitted ? "NotPermitted, does your app Info.plist include the 'audio' key in the UIBackgroundModes section?" : code.ToString ())
		{
			ErrorCode = code;
		}
Пример #13
0
		internal MidiEndpoint (MidiClient client, string name, out MidiError code)
		{
			using (var nsstr = new NSString (name)){
				GCHandle gch = GCHandle.Alloc (this);
				
				code = MIDIDestinationCreate (client.handle, nsstr.Handle, Read, GCHandle.ToIntPtr (gch), out handle);
				EndpointName = name;
			}
		}
Пример #14
0
        public MidiThruConnectionParams GetParams(out MidiError error)
        {
            if (Handle == InvalidRef)
                throw new ObjectDisposedException ("MidiThruConnection");

            IntPtr ret;
            error = MIDIThruConnectionGetParams (Handle, out ret);
            if (error != MidiError.Ok || ret == IntPtr.Zero)
                return null;
            using (var data = Runtime.GetNSObject<NSData> (ret, true)) {
                if (data == null)
                    return null;
                var cnnParams = new MidiThruConnectionParams ();
                cnnParams.ReadStruct (data);
                return cnnParams;
            }
        }