Turn mic input on

Ask software engineering and SDK questions for developers working on Mac OS X, Windows or Linux.
  • Author
  • Message
Offline

cschultz

  • Posts: 2
  • Joined: Tue May 04, 2021 7:01 pm
  • Real Name: Christian Schultz

Turn mic input on

PostTue May 04, 2021 7:22 pm

Hello, I'm new to the SDK.
I am developing a C# program to control an ATEM Mini, I modified the example from the SDK and it is working fine.
Now I need a way to control the Mic 1 input (in order to be able to turn it on and off programatically), like the control in the ATEM Software Control showing on this screenshot: https://imgur.com/a/1YyBrnG
I would like to know if the SDK has a method to make this control, and how can I do it.
I'm using here the SDK version 8.6.1.

Thank you in advance for any help!

With best regards
Christian Schultz
Offline

cschultz

  • Posts: 2
  • Joined: Tue May 04, 2021 7:01 pm
  • Real Name: Christian Schultz

Re: Turn mic input on

PostThu May 06, 2021 11:46 am

I kinda figured out how to do it, with a LOT of trial and error, I made the code below and it is working, I posted here if someone has the same doubt. I don't know if this is the easiest way to do it, but is the one I could make work.
The code just connects to an ATEM Mini, turn the MIC 1 input on and exits.

Code: Select all
using System;
using System.Runtime.InteropServices;
using System.Threading;
using BMDSwitcherAPI;

namespace ATEMSDKTest
{
    class Program
    {
        static void Main(string[] args)
        {
            IBMDSwitcher switcherInfo = null;
            IBMDSwitcherDiscovery switcherDiscovery = new CBMDSwitcherDiscovery();
            IBMDSwitcherMixEffectBlock mixEffectBlock1 = null;
            _BMDSwitcherConnectToFailure failReason = 0;
            IBMDSwitcherFairlightAudioMixer m_audiomixer;

            IntPtr audioIteratorPtr;
            Guid audioIteratorIID = typeof(IBMDSwitcherFairlightAudioInputIterator).GUID;

            IntPtr sourceIteratorPtr;
            Guid sourceIteratorIID = typeof(IBMDSwitcherFairlightAudioSourceIterator).GUID;

            IBMDSwitcherFairlightAudioInputIterator audioIterator = null;

            IBMDSwitcherFairlightAudioSourceIterator sourceIterator = null;

            string switcherName;

            if (switcherDiscovery == null)
                Environment.Exit(0);

            try
            {
                switcherDiscovery.ConnectTo("192.168.45.110", out switcherInfo, out failReason);
            }
            catch(COMException)
            {
                switch (failReason)
                {
                    case _BMDSwitcherConnectToFailure.bmdSwitcherConnectToFailureNoResponse:
                        Environment.Exit(0);
                        break;

                    case _BMDSwitcherConnectToFailure.bmdSwitcherConnectToFailureIncompatibleFirmware:
                        Environment.Exit(0);
                        break;

                    default:
                        Environment.Exit(0);
                        break;
                }
            }
            switcherInfo.GetProductName(out switcherName);
            Console.WriteLine("Conected to: {0}", switcherName);

         // Don't ask me why, but without this delay the code below does not work
            Thread.Sleep(100);

            m_audiomixer = (IBMDSwitcherFairlightAudioMixer)switcherInfo;
            m_audiomixer.CreateIterator(ref audioIteratorIID, out audioIteratorPtr);

            if (audioIteratorPtr != null)
                audioIterator = (IBMDSwitcherFairlightAudioInputIterator)Marshal.GetObjectForIUnknown(audioIteratorPtr);

            if (audioIterator != null)
            {
                IBMDSwitcherFairlightAudioInput audio;
            
            // By trial and error, I figured out that the MIC 1 input has the ID=1301, and the MIC 2 ID is 1302
                audioIterator.GetById(1301, out audio);

                if (audio != null)
                {
                    audio.CreateIterator(ref sourceIteratorIID, out sourceIteratorPtr);

                    if (sourceIteratorPtr != null)
                        sourceIterator = (IBMDSwitcherFairlightAudioSourceIterator)Marshal.GetObjectForIUnknown(sourceIteratorPtr);

                    if (sourceIterator != null)
                    {
                        IBMDSwitcherFairlightAudioSource source;
                        sourceIterator.Next(out source);
                        source.SetMixOption(_BMDSwitcherFairlightAudioMixOption.bmdSwitcherFairlightAudioMixOptionOn);
                    }
                }
            }                       
        }
    }
}




Return to Software Developers

Who is online

Users browsing this forum: No registered users and 13 guests